home *** CD-ROM | disk | FTP | other *** search
- /* *** gtoj.c *** */
- /* */
- /* IBM - PC microsoft "C" */
- /* */
- /* integer function that returns the julian date (1 = 1st day AD) */
- /* associated with a gregorian date in the form mm/dd/yy. Returns a */
- /* -1 if an error occured. */
- /* */
- /* Written by L. Cuthbertson, March 1983. */
- /* */
- /*********************************************************************/
-
- #define CENTRY 19 /* current century */
-
- long gtoj(indate)
- char indate[];
- {
- static int monthd[] = {31,28,31,30,31,30,31,31,30,31,30,31};
- int i;
- int leapd,iyr,imo,iday;
- static long cdays = 36524, ydays = 365;
-
- /* convert into expanded format if necessary */
- if ((cvtdate(indate)) != 0) return(-1);
-
- /* parse gregorian date into its pieces */
- sscanf(indate,"%2d%*1c%2d%*1c%2d",imo,iday,iyr);
-
- /* adjust month array for leap year/non-leap year */
- if (iyr < 0 || iyr > 99) return(-1);
- if (iyr%4 == 0 && iyr != 0 || CENTRY%4 == 0)
- monthd[1] = 29;
- else
- monthd[1] = 28;
-
- /* check for invalid month */
- if (imo < 1 || imo > 12) return(-1);
-
- /* check for invalid day */
- if (iday < 1 || iday > monthd[imo-1]) return(-1);
-
- /* determine the number of "extra" leap years caused by the */
- /* %400 criteria and add to it the number of leap years that */
- /* has occured up to the prior year of current century. */
- leapd = CENTRY/4;
- if (iyr != 0) leapd += (iyr-1)/4;
-
- /* determine number of days elapsed in current year */
- for (i=0;i<(imo-1);i++)
- iday = iday + monthd[i];
-
- /* calculate julian date */
- return (CENTRY*cdays + iyr*ydays + leapd + iday);
- }
- return(-1